package cn.itcast.nems.studentrecord.service;

import cn.itcast.ic.common.bean.Page;
import cn.itcast.nems.common.PageQueryModel;
import cn.itcast.nems.studentrecord.dao.entity.ClazzEnrollmentCount;
import cn.itcast.nems.studentrecord.dto.ClazzEnrollmentCountDTO;
import cn.itcast.nems.studentrecord.dto.StudentRecordDTO;
import cn.itcast.nems.studentrecord.dto.StudentRecordQueryDTO;
import cn.itcast.nems.studentrecord.dto.studentrecord.StudentRecordMessageDTO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 缴费情况业务接口
 * </p>
 *
 * @author zhouwei
 * @since 2023/11/1 7:11 PM
 **/
public interface ClazzEnrollmentCountService extends IService<ClazzEnrollmentCount> {

    /**
     * <p>
     * 手动同步缴费详情
     * </p>
     *
     * @param  executeFlag 是否执行同步
     * @author zhouwei
     * @since 2024/1/16 7:32 PM
     **/
    String manualRefresh(Boolean executeFlag );
    /**
     * 缴费情况 分页查询
     * @param queryModel 查询参数
     * @return 分页结果
     */
    Page<ClazzEnrollmentCountDTO> findCountPageList(PageQueryModel<ClazzEnrollmentCountDTO> queryModel) ;

    /**
     * <p>
     * 检查并新增缴费情况记录
     * </p>
     *
     * @param clazzId 班级ID
     * @author zhouwei
     * @since 2024/1/3 6:38 PM
     **/
    ClazzEnrollmentCount checkAndInsert(Integer clazzId)  ;

    /**
     * <p>
     * 手动更新缴费情况
     * </p>
     *
     * @param isAll 是否全部时间区间
     * @author zhouwei
     * @since 2024/1/3 6:39 PM
     **/
    List<Integer> refresh(Boolean isAll) ;

    /**
     * 创建学籍统计报名人数
     * @param message 消息体
     */
    void createRecordToTotal(StudentRecordMessageDTO message ) ;

    /**
     * 学籍支付 - 汇总缴费详情部分支付、完全支付人数
     *
     * @param recordId  学籍ID
     */
    void calculatePaidCount(String recordId);

    /**
     * <p>
     * 缴费详情-学籍分页查询
     * </p>
     *
     * @param id 缴费详情ID
     * @param queryModel 查询条件
     * @author zhouwei
     * @since 2023/12/20 2:31 PM
     **/
    Page<StudentRecordDTO> findPageListByClazzEnrollmentCountId(String id, PageQueryModel<StudentRecordQueryDTO> queryModel) ;

}
